package com.mycat.task.core;

import com.mycat.task.entity.ScheduleTask;
import org.quartz.SchedulerException;

import java.util.List;
import java.util.Map;

/**
 * 定时任务接口定义
 *
 * @author roger.
 * @email 190642964@qq.com
 * @create 2017-03-27
 */
public interface ITaskService {

    /**
     * 获取所有的Cron表达式
     * @return  Map<String,String>
     */
    Map<String,String> getAllCron();

    /**
     * 获取定时任务列表
     * @return List<ScheduleTask>
     */
    List<ScheduleTask> getAllTask();

    /**
     * 根据任务ID获取任务
     * @param id 任务ID
     * @return ScheduleTask
     */
    ScheduleTask getTaskById(int id);

    /**
     * 新增定时任务
     * @param scheduleTask ScheduleTask
     * @return ScheduleTask
     */
    ScheduleTask addScheduleTask(ScheduleTask scheduleTask) throws Exception;

    /**
     * 添加一个定时任务
     * @param taskName 任务名称
     * @param taskClassName 类名
     * @param triggerName 方法名
     * @param cron 表达式
     * @return ScheduleTask
     * @throws SchedulerException
     */
    ScheduleTask addScheduleTask(String taskName, String taskClassName, String triggerName, String cron) throws Exception;

    /**
     * 修改定时任务
     * @param scheduleTask ScheduleTask
     * @return 影响行数
     */
    int modifyScheduleTask(ScheduleTask scheduleTask);

    /**
     * 删除定时任务
     * @param scheduleTask ScheduleTask
     * @return 影响行数
     */
    int removeScheduleTask(ScheduleTask scheduleTask) throws SchedulerException;

    /**
     * 重启定时任务
     * @param scheduleTask ScheduleTask
     */
    void restartScheduleTask(ScheduleTask scheduleTask);

    /**
     * 暂停定时任务
     * @param scheduleTask ScheduleTask
     * @return 影响行数
     */
    int pauseScheduleTask(ScheduleTask scheduleTask);

    /**
     * 禁用定时任务
     * @param scheduleTask ScheduleTask
     * @return 影响行数
     */
    int disabledScheduleTask(ScheduleTask scheduleTask);

    /**
     * 关闭定时任务
     * @param scheduleTask ScheduleTask
     * @return 影响行数
     */
    int shutdownScheduleTask(ScheduleTask scheduleTask);

    /**
     * 启动所有定时任务
     */
    void startAllTask();

    /**
     * 关闭所有定时任务
     */
    void shutdownAllTask();
}
